package com.simpou.commons.utils.functional;

/**
 * Realiza uma ação sem retorno ignorando qualquer erro.
 *
 * @author Jonas Pereira
 * @since 2013-06-26
 * @version 2013-06-26
 */
public abstract class AbstractVoidAction<T>
        implements VoidAction<T> {

    @Override
    public final Void execute(T object) throws Exception {
        executeDelegate(object);
        return null;
    }

    /**
     * Relança a exceção como runtime.
     *
     * @param object
     * @param throwable
     */
    @Override
    public void doOnError(T object, Throwable throwable) {
        throw new RuntimeException(throwable);
    }

    protected abstract void executeDelegate(T object) throws Exception;
}
